/****************************************************************

this file is part of Music Practice Audio Player
Copyright (C)2012 Serhii Ratsyborynskyi (ratz@live.ru)

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

******************************************************************/

#ifndef AUDIOTYPEDEF_HPP
#define AUDIOTYPEDEF_HPP

namespace AudioProcessing
{


typedef float dBf;

typedef int Panning;

static const dBf MAX_LEVEL = 10.0;
static const Panning PAN_INTERVAL = 100;

struct Volume
{
    int multiplier;
    int divider;
};

class dB
{
public:
    dB();
    dB(dBf level);

    dBf setVolume(dBf level);
    dBf getVolume();

    Volume setIVolume(Volume level);
    Volume getIVolume();

private:
    void checkLimits(dBf & level);
    void calculateIVolume(const dBf & level, Volume & iLevel );
    dBf mLevel;
    Volume miLevel;
};

class Pan
{
public:
    Pan();
    Pan(Panning p);

    Panning setPan(Panning p);
    Panning getPan();

private:
    void checkLimits(Panning & p);
    Panning mPan;
};

}

#endif // AUDIOTYPEDEF_HPP
